/**
 * Рисовалка скругленных уголков для картинок
 * @author Sergey Chikuyonok (sc@design.ru)
 * @copyright Art.Lebedev Studio (http://www.artlebedev.ru)
 * @requires ictinus
 * @include "/ictinus/src/ictinus.js"
 */
ictinus.roundCorners = (function(){
	
	var shape_cache = {};
	
	var path_data = 'm 0, %rd ' +
			'c 0, -%r2, %r2, -%rd, %rd, -%rd ' +
			'l %w, 0 ' +
			'c %r2, 0, %rd, %r2, %rd, %rd ' +
			'l 0, %h ' +
			'c 0, %r2, -%r2, %rd, -%rd, %rd ' +
			'l -%w, 0 ' +
			'c -%r2, 0, -%rd, -%r2, -%rd, -%rd ';
	
	var width = 100, height = 100;
	
	/**
	 * Создает форму рисования для ictinus
	 * @param {Number} w Ширина формы
	 * @param {Number} h Высота формы
	 * @param {Number} [radius] Радиус скругления
	 * @return {ictinus.Shape}
	 */
	function createShape(radius){
		
		if (!shape_cache[radius]) {
			var props = {
				rd: radius,
				r2: radius / 2,
				w: width - 2 * radius,
				h: height - 2 * radius
			};
			
			var cur_path = path_data.replace(/(%(\w{1,2}))/g, function(str, p1, p2){
				return props[p2];
			});
			
			var shape =  new ictinus.Shape(cur_path);
			
			shape.scaleGrid = {
				x1: radius,
				y1: radius,
				x2: width - radius,
				y2: height - radius
			};
			
			shape_cache[radius] = shape;
		}
		
		
		return shape_cache[radius];
	}
	
	/**
	 * Сделать скругленные уголки у картинки
	 * @param {Element} img Картинка, для которой нужно сделать скругленные уголки
	 * @param {Number} [radius] Радиус скругления (если не указан, будет использована константа <code>roundedBorder.RADIUS</code>)
	 * @param {Object} [draw_params] Параметры рисования (если не указаны, будет использована константа <code>roundedBorder.DRAW_PARAMS</code>)
	 * @return {ictinus.Shape}
	 */
	function draw(img, radius, draw_params){
		draw_params = draw_params || draw.DRAW_PARAMS;
		var shape = createShape(radius || draw.RADIUS);
		
		shape.updateSizeBy(img);
		
		for (var p in draw_params) if (shape.hasOwnProperty(p)) {
			shape[p] = draw_params[p];
		}
		
		shape.decorate(img);
		return shape;
	}
	
	/** Радиус скругления углов по умолчанию, в пикселях */
	draw.RADIUS = 10;
	
	/** Параметры рисования по умолчанию */
	draw.DRAW_PARAMS = {
		strokeWidth: 0
	};
	
	return draw;
})();